#include "dac_hal.h"
//#define DAC_TEST 
#ifdef DAC_TEST
uint16_t tmp=0;
void delay(u32 cnt)
{
	u32 t_cnt;

	for (t_cnt = 0; t_cnt < cnt; t_cnt++)
	{
		__nop();
	}
}
void dac_test(void)
{

  while (1)
  {
 		if(tmp>0){
			dac_set_value(tmp);
			tmp = 0;
		}

  }
}
#endif 



void dac_hal_init(void)
{
  SYS_AnalogModuleClockCmd(SYS_AnalogModule_DAC, ENABLE);
  SYS_WR_PROTECT = 0x7a83;

  SYS_AFE_REG1 &= ~((u32)0x03 << 6);
  SYS_AFE_REG1 |= (DAC_RANGE_1V2 << 6); 

  if (((SYS_AFE_REG1 >> 6) & 0x03) == DAC_RANGE_1V2)
  { 
    SYS_AFE_DAC_DC = Read_Trim(0x00000344);
    SYS_AFE_DAC_AMC = Read_Trim(0x00000334);
  }
  else if (((SYS_AFE_REG1 >> 6) & 0x03) == DAC_RANGE_3V0)
  { 
    SYS_AFE_DAC_DC  = Read_Trim(0x00000340);
    SYS_AFE_DAC_AMC = Read_Trim(0x00000330);
  }
  else if (((SYS_AFE_REG1 >> 6) & 0x03) == DAC_RANGE_4V85)
  { 
    SYS_AFE_DAC_DC = Read_Trim(0x00000348);
    SYS_AFE_DAC_AMC = Read_Trim(0x00000338);
  }
  SYS_AFE_REG3 |= BIT11; 
  SYS_AFE_DAC = 4096;    
  #ifdef DAC_TEST
  dac_test();
  #endif

}



/**
 * @brief 设置dac 值
 * 
 * @param val  0~4095 
 */
void dac_hal_set_value(uint16_t val)
{		
	if(val>=4096)val = 4096;
	if(val<1) val = 0;

	SYS_AFE_DAC = val;
}

